requests库的使用(廖雪峰)

要通过GET访问一个页面,只需要几行代码:


对于带参数的URL,传入一个dict作为params参数:

requests自动检测编码,可以使用encoding属性查看:

无论响应是文本还是二进制内容,我们都可以用content属性获得bytes对象:

requests的方便之处还在于,对于特定类型的响应,例如JSON,可以直接获取:

需要传入HTTP Header时,我们传入一个dict作为headers参数:

要发送POST请求,只需要把get()方法变成post(),然后传入data参数作为POST请求的数据:

requests默认使用application/x-www-form-urlencoded对POST数据编码。如果要传递JSON数据,可以直接传入json参数:

类似的,上传文件需要更复杂的编码格式,但是requests把它简化成files参数:

在读取文件时,注意务必使用’rb’即二进制模式读取,这样获取的bytes长度才是文件的长度。

把post()方法替换为put(),delete()等,就可以以PUT或DELETE方式请求资源。

除了能轻松获取响应内容外,requests对获取HTTP响应的其他信息也非常简单。例如,获取响应头:


requests对Cookie做了特殊处理,使得我们不必解析Cookie就可以轻松获取指定的Cookie:

要在请求中传入Cookie,只需准备一个dict传入cookies参数:

最后,要指定超时,传入以秒为单位的timeout参数:

requests的使用(博客)

https://blog.csdn.net/WuZuoDingFeng/article/details/76156777

requests.get()

参数说明:

requests.post()

参数说明:

请求响应体说明

requests.utils中的常用方法

  1. requests.utils.get_encodings_from_content(r.content): 返回原始数据编码;
  2. requests.utils.dict_from_cookiejar(r.cookies): 将CookieJar转为字典;
  3. requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True): 将字典转为CookieJar;

开启会话,保持cookie

s = requests.Session() # 开启会话
cookies = json.loads(result) # phantomjs获取的cookies json对象
cookie = {}
for k in cookies:
cookie[k[‘name’]] = k[‘value’] # 获取每个cookie中的name和value
s.cookies = requests.utils.cookiejar_from_dict(cookie, cookiejar=None,
overwrite=True) # 将字典cookie转换为cookieJar,然后放在会话中
s.get(url…..) # 此时每个请求都会带上cookie
……………………………………………………
s.cookies: cookiejar对象;
s.cookies.get_dict(): dict,cookie键值对;

设置超时和最大尝试次数

  1. timeout是get/post等的参数, 单位秒.
  2. max_retries需要构建一个HTTPAdapter并设置其max_retries, 最后将该Adaptor加载给requests的Session对象. mount时的链接是前端最大匹配, 使用” http: ”和” https: ”可以分别对应两大类网址. 也可以更具体针对某网站.
  3. 注:max_retries适用于超时,并不适用于访问出错。
  4. 注:在会话中,请求url1所返回的cookies会自动保存,当访问url2的时候也会被自动带入。

requestsSession = requests.Session() # 开启会话
requestsAdapterA = requests.adapters.HTTPAdapter(max_retries=3) # 挂载适配器
requestsSession.mount(‘http: ‘, requestsAdapterA) # 此会话中适用所有http请求
r = requestsSession.get(url , timeout=20) # 打开相应url并设置超时

上传文件

url = ‘http://httpbin.org/post'
files = {‘file’: open(‘report.xls’, ‘rb’)}
# files = {‘file’: (‘report.xls’, open(‘report.xls’, ‘rb’), ‘application/vnd.ms-excel’, {‘Expires’: ‘0’})} # 显示的设置文件名、文件类型、文件头
r = requests.post(url, files=files)
r.text

流式上传

文件下载

注意事项

  1. get()或post()中的headers、cookies设置的值,将合并到Requests中去,所以传入 {} 也没关系;
  2. 图片、pdf等打开方式应该为 ‘wb’,写入的内容应该是 r.content;
  3. 若是响应头Content-Type中不含charset,则 r.text 默认为 ‘ISO-8859-1’;
  4. 若是timeout没有显示的设置,理论上requests请求永不超时。
  5. 在session中删除一个参数,直接设置其值为None;